import smtplib
from email.mime.text import MIMEText

sender_email = "X@qq.com"  # 这里是发送者的邮箱
password = "X"  # 这里是发送者邮箱的SMTP密钥


def send_email(msg):
    """
    发送邮件的主函数，包含基本的异常处理逻辑
    :param msg: 构建好的邮件对象（MIMEMultipart类型等）
    """
    try:
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        server.login(sender_email, password)
        server.sendmail(sender_email, msg['To'], msg.as_string())
        server.quit()
        print("邮件发送成功")
    except smtplib.SMTPException as e:
        handle_smtp_exception(e)


def handle_smtp_exception(e):
    """
    处理SMTP相关异常的函数，尝试发送异常信息邮件
    :param e: 捕获到的SMTPException异常对象
    """
    recipient_email = sender_email  # 这里是接收者的邮箱
    error_body = f"邮件发送出现异常，异常信息如下：\n{str(e)}"
    error_msg = MIMEText(error_body, 'plain', 'utf-8')
    error_msg['Subject'] = "邮件发送异常通知"
    error_msg['From'] = sender_email
    error_msg['To'] = recipient_email

    try:
        error_server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        error_server.login(sender_email, password)
        error_server.sendmail(sender_email, recipient_email, error_msg.as_string())
        error_server.quit()
        print("异常信息邮件发送成功")
    except smtplib.SMTPException as e2:
        print(f"异常信息邮件发送出现异常，最终异常信息：{str(e2)}")


def handle_general_exception(e):
    """
    处理其他通用异常的函数
    :param e: 捕获到的其他类型异常对象
    """
    print(f"其他未知异常：{str(e)}")
